package com.sinog.basic.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sinog.basic.mapper.DepartmentMapper;
import com.sinog.basic.mapper.RoleMapper;
import com.sinog.basic.service.RoleService;
import com.sinog.core.domain.Department;
import com.sinog.core.domain.Role;
import com.sinog.core.domain.RoleRes;
import com.sinog.core.util.JsonUtil;
import com.sinog.core.util.PageReturnUtil;
import com.sinog.core.util.StrUtil;
import com.sinog.core.utilbean.Result;
import com.sinog.core.utilbean.ReturnCode;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * @desc 系统管理 - 角色管理 - 角色管理 - RoleServiceImpl
 * @author -
 * @date Created in 2019年07月09日  15点28分
 */
@Service
public class RoleServiceImpl extends ServiceImpl<RoleMapper,Role> implements RoleService {

    @Resource
    private RoleMapper roleMapper;
    @Resource
    private DepartmentMapper departmentMapper;

    /**
     * 系统管理 - 角色管理 - 角色管理 - 保存角色信息（修改/新增）
     * @param data data
     * @return Result
     */
    @Override
    public Result save(String data) {
        Role bean = JsonUtil.toBean(data,Role.class);
        boolean success = bean.insertOrUpdate();
        if(success) {
            return Result.success("操作成功!");
        }
        return Result.failure(ReturnCode.SAVE_FAILED);
    }

    /**
     * 系统管理 - 角色管理 - 角色管理 - 获取角色列表数据
     * @param rolekey rolekey
     * @param pageIndex pageIndex
     * @param pageSize pageSize
     * @param sortField sortField
     * @param sortOrder sortOrder
     * @param loginUserLevel loginUserLevel
     * @return String
     */
    @Override
    public String selectRoleList(String rolekey,Integer pageIndex,Integer pageSize,String sortField,String sortOrder,String loginUserLevel) {
        rolekey = StrUtil.converseToNull(rolekey);
        Page<Map<String,String>> page = new Page<>(pageIndex + 1,pageSize);
        page = page.setRecords(roleMapper.selectPositionList(page,rolekey,loginUserLevel));
        return PageReturnUtil.pageReturn(page);
    }

    /**
     * 系统管理 - 角色管理 - 角色管理 - 模糊查询角色列表
     * @param reskey reskey
     * @param loginUserlevel loginUserlevel
     * @return Result
     */
    @Override
    public Result getAllRoleList(String reskey,String loginUserlevel) {
        //根据机构ID（reskey）查询级别
        Department department = departmentMapper.selectByDeptId(reskey);
        List<Map<String,String>> allRoleList = roleMapper.getAllRoleList(department.getLevel());
        if(allRoleList.isEmpty()) {
            Result.failure(ReturnCode.SELECT_FAILED);
        }
        return Result.success(allRoleList);
    }

    /**
     * 系统管理 - 角色管理 - 角色管理 - 根据ID删除角色
     * @param id id
     * @return Result
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Result deleteOne(String id) {
        Role role = new Role();
        boolean resultRole = role.deleteById(id);
        RoleRes roleRes = new RoleRes();
        QueryWrapper<RoleRes> wrapper = new QueryWrapper<>();
        wrapper.eq("roleid", id);
        roleRes.delete(wrapper);
        if(resultRole) {
            return Result.success("删除成功！");
        }
        return Result.failure(ReturnCode.DELETE_FAILED);
    }

    /**
     * 系统管理 - 角色管理 - 角色管理 - 根据ID查询角色详情
     * @param id id
     * @return Result
     */
    @Override
    public Result selectOne(String id) {
        Role role = new Role();
        role.setId(id);
        Role result = baseMapper.selectById(id);
        if(null != result) {
            return Result.success(JsonUtil.toText(result));
        }
        return Result.failure(ReturnCode.SELECT_FAILED);
    }
}